package br.com.rglariguet.rgportal.controller;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import br.com.rglariguet.rgportal.Banco;
import br.com.rglariguet.rgportal.Colaborador;
import br.com.rglariguet.rgportal.Empresa;
import br.com.rglariguet.rgportal.Endereco;
import br.com.rglariguet.rgportal.dao.BancoDAO;
import br.com.rglariguet.rgportal.dao.ColaboradorDAO;
import br.com.rglariguet.rgportal.dao.EmpresaDAO;
import br.com.rglariguet.rgportal.dao.EnderecoDAO;

@Controller
@RequestMapping("/admin/colaboradores")
public class ColaboradorController {
	
	@Autowired
	ColaboradorDAO colaboradorDAO;
	
	@Autowired
	EnderecoDAO enderecoDAO;
	
	@Autowired
	EmpresaDAO empresaDAO;
	
	@Autowired
	BancoDAO bancoDAO;
	
	@RequestMapping(value="/novo",   method = RequestMethod.GET)
	public ModelAndView novo(){
		ModelAndView mv = new ModelAndView("/admin/colaboradores/novoColaborador");
		mv.addObject("tipoContratacaoList", preencherComboTipoContratacao());
		mv.addObject("statusList", preencherComboStatus());
		mv.addObject("colaborador", new Colaborador());
		return mv;
	}
	
	@RequestMapping(value="/salvar",  method = RequestMethod.POST)
	public String salvar(Colaborador colaborador){
		Endereco enderecoEmpresa = enderecoDAO.salvar(colaborador.getEmpresa().getEndereco());
		colaborador.getEmpresa().setEndereco(enderecoEmpresa);
		Empresa empresa = empresaDAO.salvar(colaborador.getEmpresa());
		Endereco endereco = enderecoDAO.salvar(colaborador.getEndereco());
		Banco banco = bancoDAO.salvar(colaborador.getBanco());
		
		colaborador.setEndereco(endereco);
		colaborador.setEmpresa(empresa);
		colaborador.setBanco(banco);
		
		colaboradorDAO.salvar(colaborador);
		return "redirect:/admin/colaboradores/listar";
	}
	
	@RequestMapping(value="/alterar",  method = RequestMethod.POST)
	public ModelAndView alterar(Colaborador colaborador){
		colaboradorDAO.alterar(colaborador);
		ModelAndView mv = new ModelAndView("redirect:/admin/colaboradores/listar");
		return mv;
	}
	
	@RequestMapping(value="/editar/{id}",  method = RequestMethod.GET)
	public ModelAndView editar(@PathVariable Long id){
		Colaborador colaborador = colaboradorDAO.buscarPorId(id);
		ModelAndView mv = new ModelAndView("/admin/colaboradores/editarColaborador");
		mv.addObject(colaborador);
		mv.addObject("statusList", preencherComboStatus());
		mv.addObject("tipoContratacaoList", preencherComboTipoContratacao());
		return mv;
	}
	
	@RequestMapping(value="/excluir/{id}", method=RequestMethod.GET)	
	public String excluir(@PathVariable Long id) {
		Colaborador colaborador = colaboradorDAO.buscarPorId(id);
		colaboradorDAO.excluir(colaborador);
		return "redirect:/admin/colaboradores/listar";
	}
	
	@RequestMapping("/listar")
	public String listarColaboradores(ModelMap model, Colaborador colaborador){
		List<Colaborador> colaboradores = colaboradorDAO.listarTodos();
		model.addAttribute("colaboradores", colaboradores);
		return "admin/colaboradores/listaColaboradores";
	}
	
	protected Map<String, String> preencherComboTipoContratacao() {
		Map<String,String> tipoContratacao = new LinkedHashMap<String,String>();
		tipoContratacao.put("PJ", "PJ");
		tipoContratacao.put("CFULL", "CLT Full");
		tipoContratacao.put("CFLEX", "CLT Flex");
		tipoContratacao.put("COOP", "Cooperado");
		return tipoContratacao;
	}
	
	protected Map<String, String> preencherComboStatus() {
		Map<String,String> status = new LinkedHashMap<String,String>();
		status.put("A", "Ativo");
		status.put("I", "Inativo");
		return status;
	}
}
